package com.demo.java.OD501_550.OD544;

import java.util.Scanner;
import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【测试用例执行计划(C卷-100分)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146520744
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 读取第一行的N和M
        int[] nums = split(in.nextLine(), " ");
        int n = nums[0]; // 特征的个数
        int m = nums[1]; // 测试的组数

        // 读取特征的优先级
        int[] prioritys = new int[n];
        for (int i = 0; i < n; i++) {
            prioritys[i] = Integer.parseInt(in.nextLine());
        }

        // 存储测试组的ID和总优先级
        LinkedList<Integer[]> list = new LinkedList<>();
        for (int i = 0; i < m; i++) {
            int[] nums1 = split(in.nextLine(), " ");
            int total = 0; // 计算每组的总优先级
            for (int j = 0; j < nums1.length; j++) {
                total += prioritys[nums1[j] - 1]; // 累加特征优先级
            }
            // 将每组的ID和总优先级存入列表
            list.add(new Integer[]{i + 1, total});
        }

        // 对测试组按总优先级降序排序，相同优先级时按ID升序
        Collections.sort(list, new Comparator<Integer[]>() {
            @Override
            public int compare(Integer[] o1, Integer[] o2) {
                if (o1[1] != o2[1]) {
                    return o2[1] - o1[1]; // 总优先级降序
                } else {
                    return o1[0] - o2[0]; // 相同优先级时ID升序
                }
            }
        });

        // 输出排序后的测试组ID
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i)[0]);
        }
    }

    // 字符串转整数数组
    public static int[] split(String input_str, String chars) {
        String[] tmp2 = input_str.split(chars);
        int[] results = new int[tmp2.length];
        for (int i = 0; i < tmp2.length; i++) {
            results[i] = Integer.parseInt(tmp2[i]);
        }
        return results;
    }
}